package com.yeung.swordoffer;

/**
 * \
 * 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符，而'*'表示它前面的字符可以出现任意次（包含0次）。
 * 在本题中，匹配是指字符串的所有字符匹配整个模式。
 * 例如，字符串"aaa"与模式"a.a"和"ab*ac*a"匹配，但是与"aa.a"和"ab*a"均不匹配
 */
public class 正则表达式匹配 {
    public boolean match(char[] str, char[] pattern) {
        return new String(str).matches(new String(pattern));


    }

    public boolean mathcCore(char[] matchStr, int matchIndex, char[] patStr, int patIndex) {
        //有效性检验,   匹配串到尾, 模式串到尾,
        if (matchIndex == matchStr.length && patIndex == patStr.length) return true;
        // 模式串先到尾部, 匹配失败
        if (matchIndex != matchStr.length && patIndex == patStr.length) return false;

        //分情况
        //1. 模式串第二个字符是*,且字符串跟第模式第一个匹配,
        //2. 模式第2个字符不是*, 且匹配串与第模式一个字符匹配,则都后移一位, 否则返回false
        if ((matchIndex != matchStr.length && patStr[patIndex] == matchStr[matchIndex]) ||
                // 如果匹配串当前位置的字符是'.'z与任何字符匹配
                (patStr[patIndex] == '.' && matchIndex != matchStr.length)) {
            return mathcCore(matchStr, matchIndex + 1, patStr, patIndex + 1);
        }
        return false;
    }
}
